perm filename TVMAC[PIC,LCS] blob sn#245949 filedate 1976-11-07 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00014 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE	TVMAC
C00004 00003	TVIN:	JUMP 0
C00006 00004	CONV:	SKIP
C00007 00005	WORKS ONLY ON 4 BIT IMAGES
C00008 00006	DECDMP:	JUMP 0
C00010 00007	FORM4:	JRST INITER
C00011 00008	INITAL:	JUMP 0
C00012 00009	ADJUST:	MOVE A2,BITS
C00013 00010	DECENT:	SIXBIT /TEMP/
C00015 00011	FORM2:	JRST INIERR
C00016 00012	MSCAN:	JUMP 0
C00017 00013	SEINT:	JUMP 0
C00019 00014	PROJEC:	JUMP 0
C00021 ENDMK
C⊗;
	TITLE	TVMAC
;OCTOBER  25,  68
INTERN INITAL, TVIN, HISTO, DECDMP,BUTT,RELE
EXTERN JOBFF,DEVTB.,COMMAC,JOBSYM,JOBREL
INTERN MSCAN,DECINP,SEINT,SEINF,PROJEC
EXTERN EDGEC,FLOAT,FORSE.,EXIT,INTO.
A1=1
A2=2
A3=3
A4=4
A5=5
A6=6
A7=7
DDEC=12
ARGAC=16
SPSH=17
DTV=17
OPDEF SUBR [PUSHJ 17,0]
OPDEF RETURN [POPJ 17,0]
PSHERR:	HALT;		PUSHDOWN LIST ERROR HALT
	EXP .-1
PUSHDN:	BLOCK 20;	PUSHDOWN LIST
DECBUF:	BLOCK 3;	DECTAPE INPUT AND OUTPUT BUFFER
BCLIP=COMMAC;	BOTTOM CLIP LEVEL
TCLIP=COMMAC+1;	TOP CLIP LEVEL
BITS=COMMAC+2;	SAMPLE WIDTH
IWID=COMMAC+3;	INPUT WIDTH
LINLEN=COMMAC+4;	WORDS PER TV LINE
FLINE=COMMAC+5;	TOP (FIRST) LINE
LLINE=COMMAC+6;	BOTTOM (LAST) LINE
LSIDE=COMMAC+7;	LEFT SIDE
RSIDE=COMMAC+10;	RIGHT SIDE
DTA=COMMAC+11
HYSTAB=COMMAC+12
TVOUT:	POINT 4,0
SPUSH:	IOWD 20,PUSHDN
FILE=EDGEC+↑D1781

TVIN:	JUMP 0
	MOVEM 16,RETAD
	MOVEI 4
	MOVEM BITS
	SUBR ADJUST
	SUBR TVSUBR
	SUBR CONV
	MOVE 16,RETAD
	JRA 16,(16)

TVSUBR:	MOVE A1,BCLIP
	LSH A1,3
	OR A1,TCLIP
	DPB A1,[POINT 6,TVWD+1,23]
	MOVE A1,FLINE
	LSH A1,12
	OR A1,LSIDE
	LSH A1,11
	MOVE A2,LINLEN
	OR A1,A2
	LSH A1,11
	MOVEM A1,TVWD+2
	INIT DTV,17
	SIXBIT /TV/
	Z
	JRST .-3
	MOVNI 0,1000;		SET COUNTER FOR 1000 TRIES
	SETZM PARCNT#
LAB25:	INPUT DTV,TVWD
	MOVE A6,TVWD+3;		CHECK STATUS BITS
	TRNE A6,100040;		TEST FOR DATA MISSED OR PARITY ERROR
	JRST TVUP
	TRNE A6,20;		TEST FOR SYSTEM ERROR
	JRST SYSERR
	TRNN A6,10;		TEST FOR DONE FLAG
	JRST LAB25
	RELEASE DTV,
	RETURN

CONV:	SKIP
	MOVE 0,[XWD LOOPD,2];	CONVERT GREY CODE
	BLT 0,12
	SETZM 13
	MOVE 1,TVWD
	JRST 2

TVWD:	EXP 0,002002,0,0
;;;TVWD:	EXP 0,001002,0,0   CAMERA 1 NOT NOW WORKING 11/76
TVUP:	TRNE A6,100000
	JRST PARERR
	AOJL 0,LAB25;		MISSED DATA - TRY AGAIN
	HALT
	JRST LAB25-2
SYSERR:	HALT
	CALLI 12
PARERR:	AOS A6,PARCNT;		PARITY ERROR
	CAIG A6,12
	JRST LAB25
	HALT
	JRST PARERR-1
LOOPD:	PHASE 2
	MOVE 14,(1)
	MOVEI 11
	MOVE 13,GREY(13)
	ROTC 13,4
	SOJGE .-2
	MOVEM 14,(1)
	AOBJN 1,.-6
	RETURN
	DEPHASE

GREY:	EXP 12B3, 13B3, 11B3, 10B3, 15B3, 14B3, 16B3, 17B3
	EXP 5B3, 4B3, 6B3, 7B3, 2B3, 3B3, 1B3, 0

;WORKS ONLY ON 4 BIT IMAGES

HISTO:	JUMP 0
	MOVE A1,BITS
	CAIE A1,4
	HALT
	SETZM HYSTAB
	MOVE A1,[XWD HYSTAB,HYSTAB+1]
	BLT A1,HYSTAB+17
	MOVE A1,LLINE
	SUB A1,FLINE
	AOS A1
	IDIVI 1,2
	MOVE 4,LINLEN
	IMULI 4,2
	MOVEM 4,LINLIN#
	MOVE A2,[POINT 4,0]
	HRR A2,TVWD
	MOVEM A2,TVTMP#
	MOVE A3,IWID
	ILDB A4,A2
	AOS HYSTAB(A4)
	SOJG A3,.-2
	MOVE A2,LINLIN
	ADDB A2,TVTMP
	SOJG A1,.-6
	JRA 16,(16)

DECDMP:	JUMP 0
	MOVEM 16,RETAD#
	MOVE  JOBFF
	MOVEM SVJFF#
	MOVE DTA
	ADDI 10
	ADDI DEVTB.
	MOVE @0
	MOVEM SIXB
	INIT DDEC,14
SIXB:	Z
	XWD DECBUF,
	JRST INITER
	OUTBUF DDEC,4
	SUBR ASTOSI
	MOVEM 1,OUTDEC
	SETZM OUTDEC+2
	SETZM OUTDEC+3
	ENTER DDEC,OUTDEC
	JRST ENTERR
	MOVEI A1,RSIDE+1
	SUBI A1,BCLIP
	SETZM A2
	MOVE ARGAC,BCLIP(A2)
	SUBR DECOUT
	AOS A2
	SOJG A1,.-3
	HLRO 1,TVWD
	MOVNS 1
	MOVEM A1,XINC#
	MOVEM A1,ARGAC
	SUBR DECOUT
	MOVE A2,TVWD
	HRRM A2,.+2
	SETZM A2
	MOVE ARGAC,.(A2)
	SUBR DECOUT
	AOS A2
	SOJG A1,.-3
	CLOSE DDEC,
	MOVE  SVJFF
	MOVEM JOBFF
	MOVE 16,RETAD
	JRA 16,(16)

OUTDEC:	Z
	SIXBIT /DAT   /
	BLOCK 2

FORM4:	JRST INITER
	ASCIZ "(28H DEVICE INITIALIZATION ERROR)"
INITER:	MOVEI 1,FORM4
	JRST TYPE+3
FORM5:	JRST ENTERR
	ASCIZ "(26H FILE INITIALIZATION ERROR)"
ENTERR:	MOVEI 1,FORM5
	JRST TYPE+3
DECOUT:	SOSLE DECBUF+2
	JRST .+4
	OUT DDEC,0
	SKIPA
	JRST ERROR
	IDPB ARGAC,DECBUF+1
	POPJ 17,
ERROR:	GETSTS DDEC,A2
	HALT
	POP 17,A1;	FLUSH UNUSED SUBR RETURN
	MOVE A1,.-1
	CAIE A1,15
	JRST .-5
	HALT

ASTOSI:	MOVE FILE	;OUTPUT IN 1
	MOVEI 5,5
	SETZM 1
	MOVE 4,[POINT 7,0]
	MOVE 2,[POINT 6,1]
	SETZM 3
	ILDB 3,4
	ADDI 3,40
	IDPB 3,2
	SOJG 5,.-3
	RETURN

INITAL:	JUMP 0
	CALLI
	RESET. 0
	MOVE 17,SPUSH
	MOVE BOOL
	JUMPL ONCE
	MOVE 2,JOBFF
	MOVEM 2,TVBF#
	SETOM BOOL
ONCE:	MOVE 3,JOBREL
	SUBI 3,2144
	MOVEM 3,JOBFF
	SUB 3,TVBF
	MOVEM 3,TVFREE#
	JRA 16,(16)
BOOL:	Z

BUTT:	JUMP 0
	CALL [SIXBIT/SPCWAR/]
	MOVEM @(16)
	JRA 16,1(16)

RELE:	JUMP 0
	RELEASE 17,
	JRA 16,(16)

	INTERN ZERPP
	EXTERN TEMP.
ZERPP:	JUMP 0
	SETZM TEMP.+3
	JRA 16, 0(16)

ADJUST:	MOVE A2,BITS
	DPB A2,[POINT 6,TVOUT,11]
	MOVEI A1,44
	IDIV A1,A2
	MOVEM 1,SAMP#
	MOVE A2,A1
	MOVE 1,RSIDE
	ADDI 1,1
	SUB 1,LSIDE
	MOVEM 1,IWID
	IDIV A1,A2
	SKIPE A2
	ADDI A1,1
	MOVEM A1,LINLEN
	MOVE 2,LLINE
	ADDI 2,1
	SUB 2,FLINE
	IMUL 1,2
	MOVEM 1,TVSZ#
	MOVE 3,1
	SUB 3,TVFREE
	JUMPG 3,TYPE
	MOVN TVSZ
	HRLM TVWD
	MOVE TVBF
	HRRM TVWD
	RETURN
FORMA:	JRST TYPE
	ASCIZ "(18H DUMP PROGRAM INTOI3,15H MORE K OF CORE)"
TYPE:	IDIVI 3,2000
	ADDI 3,1
	MOVEI 1,FORMA
	OUT. 1,-1
	DATA. 3
	FIN. 0
	CALL [SIXBIT /EXIT/]

DECENT:	SIXBIT /TEMP/
	SIXBIT /DAT   /
	BLOCK 2
DECINP:	JUMP 0
	MOVEM 16,RETAD
	MOVE  JOBFF
	MOVEM SVJFF
	MOVE DTA
	ADDI 10
	ADDI DEVTB.
	MOVE @0
	MOVEM SIXP
	INIT DDEC,14
SIXP:	Z
	XWD ,DECBUF
	JRST INIERR
	INBUF DDEC,4
	SETZM DECENT+2
	SETZM DECENT+3
	SUBR ASTOSI
	MOVEM 1,DECENT
	LOOKUP DDEC,DECENT;	ENTER TV IMAGE FROM TAPE
	JRST LOKERR
	MOVEI A1,RSIDE+1
	SUBI A1,BCLIP
	SETZM A2
	SUBR DECIN
	MOVEM ARGAC,BCLIP(A2)
	AOS A2
	SOJG A1,.-3
	SUBR DECIN
	MOVEM ARGAC,ARGSZ#
	SUBR ADJUST
	MOVE ARGAC,ARGSZ
	CAME ARGAC,TVSZ
	HALT
	MOVE 3,TVSZ
	HRRZ 2,TVWD
	SUBR DECIN
	MOVEM ARGAC,(A2)
	AOS A2
	SOJG A3,.-3
	CLOSE DDEC,
	MOVE  SVJFF
	MOVEM JOBFF
	MOVE 16,RETAD
	JRA 16,(16)

FORM2:	JRST INIERR
	ASCIZ "(20H WRONG DEVICE NUMBER)"
INIERR:	MOVEI 1,FORM2
	JRST TYPE+3

FORM3:	JRST LOKERR
	ASCIZ"(15H FILE NOT FOUND)"
LOKERR:	MOVEI 1,FORM3
	JRST TYPE+3

DECIN:	SOSLE DECBUF+2;		DECTAPE INPUT ROUTINE
	JRST .+4
	IN DDEC,0
	SKIPA
	JRST .+3
	ILDB ARGAC,DECBUF+1
	RETURN

	GETSTS DDEC,A2
	RELEASE DDEC,
	MOVE A1,SVJFF
	MOVEM A1,JOBFF
	HALT

MSCAN:	JUMP 0
	MOVN BITS
	MOVEM NITS#
	HRRZ TVWD
	ADD TVOUT
	MOVEM TVPOI#
	HRRZI EDGEC
	MOVE 1,0
	ADDI 1,3363
	MOVE 2,(1)
	MOVEM 2,FILP#
	ADDI 2,1
	MOVE 1,2
	IMULI 1,10
	ADDI 1,10
	ADD 1,0
	MOVEM 1,FILT#
	MOVE 1,2
	ADD 1,0
	ADDI 1,2620
	MOVEM 1,FILX#
	ADDI 1,261
	MOVEM 1,FILY#
	MOVEI 15,0
M4:	SETZM GRID(15)
	CAIGE 15,↑D997
	AOJA 15,M4
	JRA 16, 0(16)

SEINT:	JUMP 0
	MOVE 0,@ 0(16)
	MOVE 6,@ 1(16)
	CAIL 0,↑D333
	HALT
	CAIG 0,0
	HALT
	CAIL 6,↑D256
	HALT
	CAIG 6,0
	HALT
	MOVE 1,0
	ADDI 1,1
	IDIVI 1,2
	MOVE 2,0
	SUBI 2,1
	IDIVI 2,2
	MOVE 3,6
	ADDI 3,1
	IDIVI 3,2
	MOVE 4,6
	SUBI 4,1
	IDIVI 4,2
	IMULI 3,↑D166
	IMULI 4,↑D166
	MOVE 7,2
	ADD 7,3
	MOVE 5,1
	ADD 5,3
	MOVE 3,2
	ADD 3,4
	ADD 1,4
	IDIVI 1,↑D36
	IDIVI 3,↑D36
	IDIVI 5,↑D36
	IDIVI 7,↑D36
	ADDI 1,GRID
	ADDI 3,GRID
	ADDI 5,GRID
	ADDI 7,GRID
	MOVEI 9,1
	LSH 9,@8
	MOVEI 8,1
	LSH 8,@6
	MOVEI 6,1
	LSH 6,@4
	MOVEI 4,1
	LSH 4,@2
	ORM 4,@1
	ORM 6,@3
	ORM 8,@5
	ORM 9,@7
	JRA 16,2(16)

SEINF:	JUMP 0
	MOVE 1,@0(16)
	MOVE 3,@1(16)
	CAIL 1,↑D333
	HALT
	CAIG 1,0
	HALT
	CAIL 3,↑D256
	HALT
	CAIG 3,0
	HALT
	IDIVI 1,2
	IDIVI 3,2
	IMULI 3,↑D166
	ADD 1,3
	IDIVI 1,↑D36
	ADDI 1,GRID
	MOVEI 4,1
	LSH 4,@2
	SETZ 0
	TDNE 4,@1
	SETO 0
	JRA 16,2(16)
GRID:	BLOCK ↑D598

PROJEC:	JUMP 0
	MOVEM 16,RETAD
	MOVE @0(16)
	SUB LSIDE
	MOVEM X
	MOVE @1(16)
	SUB FLINE
	MOVEM Y
	SETZ 1,
	SETZ 2,
	SETZ 3,
	SETZ 4,
	SETZ 5,
	SETZ 6,
	SETZ 7,
	SETZ 10,
	MOVE 11,FILX	;LAST USED ELEMENT IN ARRAY XP
	MOVE 12,FILY	; "     "     "    "    "   YP
	MOVE 13,FILT	; "     "     "    "    "   T
	MOVE 16,FILP	; =PARMAX
	HRLI  13,377777
P10:	MOVE 14,X
	MOVE 0,Y
	ADD 14,@11
	ADD 0,@12
	IMUL 0,LINLEN
	IDIV 14,SAMP
	ADD 14
	ADD TVPOI
	IMUL 15,NITS
	ADDI 15,44
	DPB 15,[POINT 6,0,5]
	ILDB 0,0
	FSC 0,233
	POP 13,14
	FMPR 14,0
	FADR 7,14
	POP 13,14
	FMPR 14,0
	FADR 6,14
	POP 13,14
	FMPR 14,0
	FADR 5,14
	POP 13,14
	FMPR 14,0
	FADR 4,14
	POP 13,14
	FMPR 14,0
	FADR 3,14
	POP 13,14
	FMPR 14,0
	FADR 2,14
	POP 13,14
	FMPR 14,0
	FADR 1,14
	POP 13,14
	FMPR 14,0
	FADR 10,14
	SUBI 11,1
	SUBI 12,1
	SOJGE 16,P10
	MOVEM 10,EDGEC
	MOVEM 1,EDGEC+1
	MOVEM 2,EDGEC+2
	MOVEM 3,EDGEC+3
	MOVEM 4,EDGEC+4
	MOVEM 5,EDGEC+5
	MOVEM 6,EDGEC+6
	MOVEM 7,EDGEC+7
	MOVE 16,RETAD
	JRA 16,2(16)
X:	0
Y:	0
	END